<?php
/**
*  @package :  class.main
*  @classID :   Action.class.php
*  @author  :  邝达峰
*  @date    : 2017.07.12
*  抽象基类，所有动作均继承于此类
*
*/

abstract class Action
{
	/**
    * 构造函数
    * @param:  NULL
    * @return: NULL
    * @access: public
    */
	public function __construct()
	{
		$this->_init();
	}

	/**
	 * 控制器初始化方法
	 * @return void
	 * @access protected
	 */
	protected function _init(){}

	/**
	 * 请求处理函数
	 * @var string
	 * @access protected
	 */
	protected $_handler = null;

	/**
     * 自动变量设置
     * @access public
     * @param $name 属性名称
     * @param $value  属性值
     */
	public  function __set($name ,$value)
	{
		if(property_exists($this,$name)){
			$this->$name = $value;
		}
	}

	/**
     * 自动变量获取
     * @access public
     * @param $name 属性名称
     * @return mixed
     */
	public function __get($name)
	{
		if(isset($this->$name)){
			return $this->$name;
		}else {
			return null;
		}
	}

	/**
	 * 默认动作
	 * @access protected
	 */
	protected function _default(){}

	/**
	 * 权限控制
	 * 该权限控制函数统一处理控制器所有方法的权限判断
	 * 如果权限判断失败，则调用相应的错误处理页面进行处理，退出程序运行
	 *
	 * @param string $handler          请求处理器(函数)
	 * @return bool
	 * @access protected
	 */
	protected function validate($handler)
	{
		return true;
	}

	/**
	 * 自动加载main目录下类文件
	 * @param string $class  类名
	 * @return bool	加载该文件成功，则返回true, 否则返回false
	 * @access public
	 * @static
	 */
	public static function loadMain($class)
	{
		$file = SYSTEM_CLASS_PATH.'main'.DIRECTORY_SEPARATOR.$class.'.class.php';
		return self::loadFile($file);
	}

	/**
	 * 自动加载modules目录下类文件
	 * @param string $class  类名
	 * @return bool	加载该文件成功，则返回true, 否则返回false
	 * @access public
	 * @static
	 */
	public static function loadModule($class)
	{
		$file = SYSTEM_CLASS_PATH.'modules'.DIRECTORY_SEPARATOR.$class.'.class.php' ;
		return self::loadFile($file);
	}

	/**
	 * 自动加载tool目录下类文件
	 * @param string $class  类名
	 * @return bool	加载该文件成功，则返回true, 否则返回false
	 * @access public
	 * @static
	 */
	public static function loadTool($class)
	{
		$file = SYSTEM_CLASS_PATH.'tool'.DIRECTORY_SEPARATOR.$class.'.class.php' ;
		return self::loadFile($file);
	}


	/**
	 * 自动加载models目录下类文件
	 * 数据库操作类
	 * @param string $class  类名
	 * @return bool	加载该文件成功，则返回true, 否则返回false
	 * @access public
	 * @static
	 */
	public static function loadModels($class)
	{
		$class = str_replace('Model','',$class);
		$file = SYSTEM_PATH.'models'.DIRECTORY_SEPARATOR.$class.'.class.php' ;
		return self::loadFile($file);
	}


	/**
    *  初始化smarty模板
    *  @param:  NULL
    *  @return: object $smarty
    *  @access: public
    */
	public static function &getSmarty()
	{
		#判断模板是否存在
		if (file_exists(SYSTEM_LIB_PATH.'smarty'.DIRECTORY_SEPARATOR.'Smarty.class.php') ) {
			#加载smarty
			self::loadFile(SYSTEM_LIB_PATH.'smarty'.DIRECTORY_SEPARATOR.'Smarty.class.php');
		} else {
			#抛出错误
			throwException($GLOBALS['lang']['INCLUDE_SMARTY_NOT_EXISTS']);
		}
		#获取Smarty对象
		$smarty = &ApplicationController::C('Smarty');
		#Smarty 模板路径
		$smarty->template_dir = './';
		#编译路径
		$smarty->compile_dir  = SYSTEM_CACHE_DATA_PATH.'smarty'.DIRECTORY_SEPARATOR;
		#配置路径
		$smarty->config_dir   = SYSTEM_LANG_THEME_PATH.USER_LANG.DIRECTORY_SEPARATOR;
		#编译开关
		$smarty->compile_check  = SMARTY_COMPILE_CHECK;
		#是否打开调试模式
		$smarty->debugging      = SMARTY_DEBUG_MODE;
		#左边定界符
		$smarty->left_delimiter = CONFIG_SMARTY_LEFT_DELIMITER;
		#右边定界符
		$smarty->right_delimiter = CONFIG_SMARTY_RIGHT_DELIMITER;
		#缓存开关
		$smarty->caching = SMARTY_CACHING_CHECK;
		#强制重新生成编译文件
		if(SYSTEM_DEBUG===true){
			$smarty ->force_compile=true;
		}
		#设置缓存
		if(SMARTY_CACHING_CHECK){
			#缓存时间
			$smarty->cache_lifetime = SMARTY_CACHING_TIME;
			#设置缓存的存放路径
			$smary_cache = SYSTEM_CACHE_DATA_PATH.'smarty_cache/';
			if(is_dir($smary_cache)===false){
				mkdir($smary_cache,0777,true);
			}
			$smarty->cache_dir = $smary_cache;
		}
		#smarty 模板变量设置
		$smarty->assign('website_domain',WWW_SITE_ROOT);//网站主页
		$smarty->assign('tpl_path',USER_THEME_PATH . $_REQUEST['module']);//动作所在模板位置
		$smarty->assign('tpl_root_path',USER_THEME_PATH  . DIRECTORY_SEPARATOR);//模板根目录
		$smarty->assign('head_path',USER_THEME_PATH.'public/header.html');//模板公共头部
		$smarty->assign('foot_path',USER_THEME_PATH.'public/footer.html');//模板公共尾部
		$smarty->assign('user_theme_js_url',USER_THEME_JS_URL);//JS路径
		$smarty->assign('user_theme_css_url',USER_THEME_CSS_URL);//css路径
		$smarty->assign('user_theme_img_url',USER_THEME_STATIC_URL);//静态图片路径
		$smarty->assign('IMGPATH',USER_THEME_STATIC_URL);//静态图片路径
		$smarty->assign('cookie_sw',$_COOKIE['cookie_sw']?$_COOKIE['cookie_sw']:'网络114');//搜索关键字cookie
		$smarty->assign('pub_user_login_id',$_COOKIE['uid']?$_COOKIE['uid']:$_SESSION['uid']);//用户登录id
		$smarty->assign("nowVisitUrl", urlencode("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));//当前访问地址
		$smarty->register_modifier("ouputCss", "Func::ouputCss");//样式处理函数
		$smarty->register_modifier("ouputJs", "Func::ouputJs");//js脚本处理函数
		$smarty->register_modifier("cnSubStr", "Func::cnSubStr");//中文截取
		$smarty->register_modifier("fileUrlHandle", "Func::fileUrlHandle");//文件路径集群处理
		$smarty->register_modifier("imageSrcHandle", "Func::imageSrcHandle");//图片路径集群处理
		$smarty->register_modifier("videoUrlHandle", "Func::videoUrlHandle");//视频路径集群处理
		$smarty->register_modifier("get_domain_url", "Func::get_domain_url");//获取到网站域名地址
		$smarty->register_modifier("get_msg_type", "Func::get_msg_type");//获取到网站信息审核原因对应id
		$smarty->register_modifier("get_msg_name", "Func::get_msg_type_name");//获取到网站信息审核原因对应id
		$smarty->register_modifier('get_product_detail_url','Func::get_product_detail_url');//产品详细页函数
		$smarty->register_modifier('get_corp_detail_url','Func::get_corp_detail_url');//企业详细页函数
		$smarty->register_modifier('get_hot_search_key','Func::get_hot_search_key');//获取热门关键字
		$smarty->register_modifier('createDetailUrlById','Func::createDetailUrlById');//生成信息详情页URL
		$smarty->register_modifier('getMsgNameById','Func::getMsgNameById');//获取信息名（如：产品)
		$smarty->register_modifier('getPubTopHtml','Func::getPubTopHtml');//获取公共头部信息
		$smarty->register_modifier('get_hot_keyword_by_solr','Func::get_hot_keyword_by_solr');//通过搜索引擎获取热门搜索关键字
		$smarty->register_modifier('set_encrypt','Func::set_encrypt');//设置加密字符
		$smarty->register_modifier('get_encrypt','Func::get_encrypt');//获取解密字符
		#返回对象
		return $smarty;
	}

	/**
	 * 设置图片路径
	 * @return $img
	 */
	public static function setImgPath()
	{
		static $img;
		if(!$img) {
			$img = str_replace(strstr(USER_THEME_IMAGE_URL,'|'),'',USER_THEME_IMAGE_URL);
		}
		return $img;
	}

	/**
     * 加载文件
     * @param string $file
     * @return bool
     * @access protected
     */
	public static function loadFile($file)
	{
		if(file_exists($file)){
			return (include_once $file)?true:false;
		}
		return false;
	}


	/**
   *  引用数据连接对象
   *  @param:  $db_name 需要读取的数据库
   *  @return: object
   *  @access: 邝达峰
   */
	public static function getDB($db_name='default')
	{
		$db_name = empty($db_name) ? 'default' : $db_name;
		$instance = DB::getInstance($db_name);
		return $instance;
	}

}
?>